package com.ms.log.logger;

import com.ms.log.appender.Appender;
import com.ms.log.context.LoggerContext;

/**
 * @author zdh
 * 日志记录者，即拿取日志，把日志找到 具体的输出器进行输出
 */
public interface Logger {


    /**
     * 记录 trace 级别以上日志
     * @param s
     */
    void trace(String s);
    /**
     * 记录 debug 级别以上日志
     * @param s
     */
    void debug(String s);

    /**
     * 记录 info 级别以上日志
     * @param s
     */
    void info(String s);

    /**
     * 记录 warn 级别以上日志
     * @param s
     */
    void warn(String s);

    /**
     * 记录 error 日志
     * @param s
     */
    void error(String s);


    /**
     *  记录 trace 级别以上日志
     * @param s
     * @param args
     */
    void trace(String s,Object... args);
    /**
     * 记录 debug 级别以上日志
     * @param s
     * @param args
     */
    void debug(String s,Object... args);

    /**
     * 记录 info 级别以上日志
     * @param s
     * @param args
     */
    void info(String s,Object... args);

    /**
     * 记录 warn 级别以上日志
     * @param s
     * @param args
     */
    void warn(String s,Object... args);

    /**
     * 记录 error 日志
     * @param s
     * @param args
     */
    void error(String s,Object... args);


    /**
     * 记录 error 日志
     * @param s
     * @param e
     */
    void error(String s, Throwable e);



    /**
     * 是否开启trace级别以上日志(记录全部日志)
     * @return
     */
    boolean isTraceEnabled();

    /**
     * 是否开启debug级别以上日志（记录除了trace之外的其他级别日志）
     * @return
     */
    boolean isDebugEnabled();

    /**
     * 是否开启Info级别以上日志（记录info、warn、error）
     * @return
     */
    boolean isInfoEnabled();

    /**
     * 获取日志输出器
     * @return
     */
    Appender getAppender();


    /**
     * 设置父日志记录器
     * @param parentLogger
     */
    void setParent(Logger parentLogger);

    /**
     * 设置父日志记录器
     * @param parentLogger
     */

    /**
     * 设置日志记录器 管理上下文
     * @param loggerContext
     */
    void setLoggerContext( LoggerContext loggerContext);
}
